Journaled or Journaling File Systems (JFS) are well known in the art as some of the most robust file systems available. Operating systems such as UNIX, LINUX, International Business Machines' (IBM's) AIX™ and Apple Computer's Mac OS X™ are a few operating systems which include journaling.
Generally speaking, a non-journaling filesystem simply executes a series of operations on a file without tracking the changes. So, a file change that requires several sequential operations is susceptible to filesystem corruption if an error occurs between any of the steps. For example, when a program is closing down, several steps may be required to delete the files, blocks or sectors which it was using, followed by marking the freed-up space for re-allocation in an allocation structure such as a file allocation table. If there is a power failure, reboot or other anomaly in operation between the step of deleting files and marking the freed-up space as being available, the latter operations may not occur and thus memory is “lost” and unavailable for future programs to use.
Over time and through several of these types of errors, usable space may eventually become constrained.
A journaling file system keeps a journal of file operations to perform, including which operations have been performed and which operations are yet to be performed. If an operational anomaly occurs during a sequence of related file actions (read, write, rename, re-allocate, etc.), then upon recovery (reboot, restart, etc.), the operating system can review the status of all entries in the journal and complete any operations which are pending but incomplete.
Without using terminology which is specific to a particular operating system, the journals can be classified into two general types—physical journals and logical journals. The former tracks all changes to all blocks, while the latter tracks only changes to metadata. The former is more fault tolerant than the latter, but the latter imposes less of a performance burden than the former but does not provide as robust fault tolerance.